/**
 * <p>Title: UserGroupSvc</p>
 * <p>Description: The Interface of User Group Svc</p>
 * <p>Copyright: Baosight Software LTD.co Copyright (c) 2002</p>
 * <p>Company: Baosight Software</p>
 * @author Zuo Yefeng
 * @version 1.0
 * <pre>Histroy:
 *       2016-9-14  Zuo Yefeng  Create
 *</pre>
*/

package cn.jhg.account.service;
import java.util.List;
import cn.jhg.account.entity.User;
import cn.jhg.account.entity.UserGroup;
import cn.jhg.account.entity.UserGroupStatus;
import cn.jhg.account.util.ServiceResult;

public interface UserGroupSvc {

	/**
	 * 按 ID 获取User Group 
	 * @param gid	User Group ID
	 * @param iuid	调用者 id
	 * @return User Group Object
	 */
	public ServiceResult<UserGroup> getUserGroupById(int gid, int iuid);

	/**
	 * 按名字获取User Group 
	 * @param name	User Group Name
	 * @param iuid	调用者 id
	 * @return User Group Object
	 */
	public ServiceResult<UserGroup> getUserGroupByName(String name, int iuid);
	
	/**
	 * 按代码获取User Group 
	 * @param code	User Group 代码
	 * @param iuid	调用者 id
	 * @return User Group Object
	 */
	public ServiceResult<UserGroup> getUserGroupByCode(String code, int iuid);

	/**
	 * 按名字查找 User Group（模糊查询），eg: 输入“员工”,返回所有名字中含有“员工”的用户组
	 * @param condition	查找条件
	 * @param iuid	调用者 id
	 * @return	查找结果（a set of User Group Object）
	 */
	public ServiceResult<List<Integer>> findUserGroupsByName(String condition, int iuid);
	
	/**
	 * 查找用户组
	 * @param code	用户组代码（允许部分匹配），等于空查找全部
	 * @param name	用户组名（允许部分匹配），等于空查找全部
	 * @param status	用户组状态，等于空查找全部
	 * @param iuid		调用者 id
	 * @return	ErrorCode, 用户组 id set
	 */
	public ServiceResult<List<Integer>> findUserGroup(String code, String name, UserGroupStatus[] status, int iuid);
	// code like %#{code}% and name like %#{name}% and (status&16)>0 and (status&16)=0
	// -- status&16 > 0  判断是否失效
	// -- status&16 = 0 判断是否未失效

	/**
	 * 添加User Group 
	 * @param group	User Group Object
	 * @param iuid	调用者 id
	 * @param sid   签名 id（操作前用户确认签名记录的 id）
	 * @return Error Code
	 */
	public ServiceResult<Integer> addUserGroup(UserGroup group, int sid, int iuid);

	/**
	 * 更新 User Group 
	 * @param group	User Group Object
	 * @param iuid	调用者 id
	 * @param sid   签名 id（操作前用户确认签名记录的 id）
	 * @return	Error Code
	 */
	public ServiceResult<Integer> updateUserGroup(UserGroup group, int sid, int iuid);

	/**
	 * 失效 User Group 
	 * @param uid	User Group ID
	 * @param iuid	调用者 id
	 * @param sid   签名 id（操作前用户确认签名记录的 id）
	 * @return	Error Code
	 */
	public ServiceResult<Integer> invalidateUserGroup(int ugid, int sid, int iuid);
	
	/**
	 * 按用户组查询用户
	 * @param ugid	查找条件
	 * @return	查找结果（a set of User）
	 */
	public ServiceResult<List<Integer>> findUser(int ugid,int iuid);
	
	/**
	 * 按用户组查询用户
	 * @param ugid	查找条件
	 * @return	查找结果（a set of User）
	 */
	public ServiceResult<List<User>> findUsers(int ugid,int iuid);
	
	/**
	 * 查找用户组
	 * @param code	用户组代码（允许部分匹配），等于空查找全部
	 * @param name	用户组名（允许部分匹配），等于空查找全部
	 * @param status	用户组状态，等于空查找全部
	 * @param iuid		调用者 id
	 * @return	ErrorCode, 用户组 id set
	 */
	public ServiceResult<List<UserGroup>> findUserGroups(String code, String name, UserGroupStatus[] status, int iuid);
	// code like %#{code}% and name like %#{name}% and (status&16)>0 and (status&16)=0
	// -- status&16 > 0  判断是否失效
	// -- status&16 = 0 判断是否未失效

	/**
	 * 在用户组中添加单个用户
	 * @param ugid  用户组 id
	 * @param uid   用户 id
	 * @param iuid  调用者 id
	 * @param sid   签名 id（操作前用户确认签名记录的 id）
	 * @return	ErrorCode
	 */
	public ServiceResult<Integer> addMember(int ugid, List<Integer> uidList, int sid, int iuid);
	// t_ibcp_usergroup_member 表
	// 检查用户是否已存在用户组中
	// 若存在，直接返回成功
	// 若不存在，将用户添加至用户组，并增加审计追踪记录	
	
	/**
	 * 删除用户组的用户
	 * @param ugid
	 * @param uid
	 * @param sid   签名 id（操作前用户确认签名记录的 id）
	 * @param iuid
	 * @return  ErrorCode
	 */
	public ServiceResult<Integer> deleteMember(int ugid,List<Integer> uidList, int sid, int iuid);
}
